package net.huashitong.ssydt.provider.pk.service;


import net.huashitong.ssydt.pk.entity.vo.*;
import net.huashitong.ssydt.provider.vo.BaseLongIdPagingVO;

import java.util.List;

/**
 * @author <a href="mailto:yhy23456@163.com">huiyang.yu</a>
 * @since 2017.12.18
 */
public interface YzddService {
    /**
     * 获取挑战信息
     *
     * @return
     */
    GameRuleVO get();

    /**
     * 获取剩余免费次数
     *
     * @param userId
     * @return
     */
    Integer getFree(String userId);

    /**
     * 获取距离比赛结束时间
     *
     * @return
     */
    int getTimer();

    /**
     * 我的排行
     *
     * @param userId
     * @return
     */
    MyRankVO getMyRank(String userId);

    /**
     * 去除错误答案
     *
     * @param challengePrivilegeVO
     * @param userId
     */
    void postRemoveError(ChallengePrivilegeVO challengePrivilegeVO, String userId);

    /**
     * 选中正确答案
     *
     * @param challengePrivilegeVO
     * @param userId
     */
    void postSelectedCorrect(ChallengePrivilegeVO challengePrivilegeVO, String userId);

    /**
     * 继续刷题（复活）
     *
     * @param challengePrivilegeVO
     * @param userId
     */
    void postRevive(ChallengePrivilegeVO challengePrivilegeVO, String userId);

    /**
     * 一站到底比赛刷题
     *
     * @param userId
     * @param yzddChallengeVO
     * @return
     */
    ChallengeRecordVO postChallenge(String userId, YzddChallengeVO yzddChallengeVO);

    /**
     * 一站到底比赛交卷
     *
     * @param challengeSubmitVO
     * @param userId
     * @return
     */
    ChallengeRecordVO postChallengeSubmit(ChallengeSubmitVO challengeSubmitVO, String userId);

    /**
     * 执行生成排行榜
     */
    void executeRanking();

    MyMedalVO getMyMedal(String userId);

    List<MedalVO> getMedalRank(BaseLongIdPagingVO baseLongIdPagingVO);

    List<RankingVO> getRanking(RankingInVO rankingInVO);


    /**
     * 计算最终排名和结算
     */
    void calculateFinalRankAndSettlementNotify();

    /**
     * 更新奖牌榜
     */
    void updateMedalRank();

    /**
     * 更新发放用户勋章
     */
    void updateUserTaskMedal();
}
